package com.briup.day07;

/**
 * @author 谭梦寻
 * @version 1.1
 */
class Demo {
    public static int num;
    public static void method() {
        System.out.println("这是一个静态方法");
    }
}
public class TestStatic {

    public static void main(String[] args) {
    //1.静态数据成员会随着类的加载而加载（开辟内存并进行默认初始化）
    //先于对象存在
        Demo.method();

        Demo.num = 10;
    //2.实例化两个对象，然后通过对象访问静态成员，输出其值
        Demo demo1 = new Demo();
        demo1.method();
        Demo demo2 = new Demo();
        System.out.println(demo1.num);//输出结果为 10
        System.out.println(demo2.num);//输出结果为 10

/*  可以看出，无论是使用类访问静态属性，还是使用这个类的某个对象访问静属性，
    效果是一样的，这个属性对这个类的所有对象都是可见的、共享的。
    静态属性的存储位置：
        在方法区中有一块静态区，专门用来存储各个类静态数据成员。
        当操作静态数据成员时，不论是通过类名，还是通过对象名操作，
        都是操作静态区中对应的内存区域。
*/
    //3.通过类名修改静态成员值，再借助对象.static成员，输出其值
        Demo.num = 20;
        System.out.println(demo1.num);//输出结果为 20
        System.out.println(demo2.num);//输出结果为 20
    //4.通过对象名修改静态成员值，再借助类名.static成员，输出其值
        demo1.num = 30;
        System.out.println(Demo.num);//输出结果为 30
        System.out.println(demo2.num);//输出结果为 30
    }
}
